<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>

  <body>
    <script>
      const setTime = (n) => {
        return new Promise((res, rej) => {
          setTimeout(() => {
            console.log('我成功了')
            res(n)
          }, n * 1000)
        })
      }

      const setTimeError = (n) => {
        return new Promise((res, rej) => {
          setTimeout(() => {
            console.log('我失败了')
            rej(n)
          }, n * 1000)
        })
      }

      const p1 = setTime(1)
      const p2 = setTime(2)
      const p3 = setTime(3)
      const p4 = setTime(4)
      const p5 = setTime(5)

      //Promise.all方法可以会发起并行的Promise异步操作，等所有的异步操作结束才执行then函数
      //all方法接收一个数组作为参数，只要其中有一个promise结果为rejected则全部失败
      //输出一个数组作为结果

      // Promise.all([p1, p2, p3, p4, p5])
      //   .then((res) => console.log(res))
      //   .catch((err) => console.log(err))

      //Promise.race方法也可以发起并行的Promise异步操作，有一个结束就会执行then函数
      //race方法接收一个数组作为参数，
      //第一个promise结果为fulfilled则全部成功，第一个promise结果为rejected则全部失败

      Promise.race([p5, p2, p3, p4, p1])
        .then((res) => console.log(res))
        .catch((err) => console.log(err))
    </script>
  </body>
</html>
